package com.example.demo_yunpan.service;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HadoopHAExample {
    public static void main(String[] args) {
        // 创建一个Hadoop配置对象
        Configuration conf = new Configuration();

        // 设置HDFS的逻辑名称服务URI，这是HA配置的关键部分
        // 替换"myns1"为你的Hadoop集群的逻辑名称
        // 设置HDFS的名称服务ID，这是Hadoop HA配置中的一个关键参数
        conf.set("dfs.nameservices", "hacluster");
// 设置NameNode的RPC地址和逻辑名称
        conf.set("dfs.namenode.rpc-address.hacluster.nn1", "hadoop1:9000");
        conf.set("dfs.namenode.rpc-address.hacluster.nn2", "hadoop2:9000");
// 设置NameNode的HTTP地址和逻辑名称
        conf.set("dfs.namenode.http-address.hacluster.nn1", "hadoop1:50070");
        conf.set("dfs.namenode.http-address.hacluster.nn2", "hadoop2:50070");

        // 如果你有Kerberos认证或其他安全设置，也需要在这里配置
        // conf.set("hadoop.security.authentication", "kerberos");
        // ... 其他相关安全配置

        try {
            // 使用配置对象创建一个FileSystem实例
            FileSystem fs = FileSystem.get(conf);

            // 如果能够获取到FileSystem对象而没有抛出异常，说明初始化成功
            System.out.println("FileSystem object initialized successfully.");

            // 可以在这里执行其他HDFS操作，比如列出根目录的文件

            // 关闭FileSystem对象
            fs.close();
        } catch (Exception e) {
            System.err.println("Error initializing FileSystem: " + e.getMessage());
            e.printStackTrace();
        }
    }
}
